#ifndef GRAPH_TYPES_H
#define GRAPH_TYPES_H
#include <cstdint>
#include <vector>

using namespace std;

/*
 * Une documentation Doxygene serait bienvenue, pratique et facile à réaliser.
 */

/* D'après Rolphie, on peut considérer le coût comme étant toujours positif. Donc soit on choisit un type signé et une valeur négative du flot impliquera qu'il n'existe pas d'arc entre deux sommets (ce qui évite d'avoir une matrice supplémentaire pour l'accessibilité d'un sommet à un autre), soit on définit un type non-signé et sa valeur maximale définira la non-existence de l'arc (pour information, quand on assigne -1 à une variable de type non-signé alors la variable prend sa valeur maximale).
   Sinon, on garde une matrice supplémentaire de bool (1 octet par bool, j'ai vérifié) et on stocke les arcs là dedans (dans les deux sens, évidemment). Dans ce cas nos classe héritent plus de la classe mère, mais on perds n² octets. Pour exemple, sur un graphe de 1000 sommets on perd 1Mo. Pas énorme.
   Dans la suite, je ferai comme si on avait choisi la première option.*/

/*
 * Pour le lexique anglais (si on le garde) : https://en.wikipedia.org/wiki/Glossary_of_graph_theory
 */

//Pour les types ci-dessous : https://en.wikipedia.org/wiki/C_data_types#Fixed-width_integer_types
typedef uint16_t summit_t; //Équivalent à un unsigned short int (sous architecture 32 bits). Soient 65536 possibles.
typedef int16_t weight_t; //Signé 
typedef uint32_t edges_t;
typedef uint32_t flow_t; //Pour flots et capacité.

#endif
